package Sessions;


import java.util.ArrayList;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.jboss.ejb3.annotation.RemoteBinding;

import EntityBeans.Indirizzo;
import EntityBeans.UtenteRegistrato;

/**
 * Session Bean implementation class CercaSession
 */
@Stateless
@RemoteBinding(jndiBinding="Sessions.CercaSessionRemote")
public class CercaSession implements CercaSessionRemote {
	@PersistenceContext(unitName="swimv2")
	private EntityManager manager;

    /**
     * Default constructor. 
     */
    public CercaSession() {
        // TODO Auto-generated constructor stub
    }
    
    @Override
	public ArrayList<UtenteRegistrato> cercaUtentiSistema(String nome, String cognome, String paese, String nazione, String abilita, String idAbilita) {
		/*
		String s = "FROM UtenteRegistrato u, Indirizzo i JOIN indirizzo ON i.cap=u.cap WHERE u.nome=:nome AND u.cognome=:cognome AND i.paese=:paese AND i.nazione=:nazione AND i.cap=:cap";
		Query q = manager.createQuery(s);
		q.setParameter("nome", nome);
		q.setParameter("cognome", cognome);
		q.setParameter("paese", paese);
		q.setParameter("nazione", nazione);
		q.setParameter("cap", cap);
		*/
    	
    	String s1 = "FROM UtenteRegistrato u WHERE u.nome=:nome AND u.cognome=:cognome";
    	Query q1 = manager.createQuery(s1);
    	q1.setParameter("nome", nome);
    	q1.setParameter("cognome", cognome);
    	UtenteRegistrato ut = (UtenteRegistrato) q1.getSingleResult();
    	String via = ut.getNomevia();
    	String numeroCivico = ut.getNumerocivico();
    	int cap = ut.getCap();
    	
    	
    	String s2 = "FROM Indirizzo i WHERE i.nazione=:nazione AND i.paese=:paese";
    	Query q2 = manager.createQuery(s2);
    	q2.setParameter("paese", paese);
    	q2.setParameter("nazione", nazione);
    	Indirizzo ind = (Indirizzo) q2.getResultList();
    	int capInd = ind.getCap();
    	String viaInd = ind.getNomevia();
    	String numeroCivicoInd = ind.getNumerocivico();
    	
    	
    	String s3 = "SELECT id FROM UtenteRegistrato u, Indirizzo i WHERE i.capInd=:u.cap AND i.viaInd=:u.via AND i.numeroCivicoInd=:u.numeroCivico";
    	Query q3 = manager.createQuery(s3);
    	q3.setParameter("capInd", capInd);
    	q3.setParameter("viaInd", viaInd);
    	q3.setParameter("numeroCivicoInd", numeroCivicoInd);
    	q3.setParameter("cap", cap);
    	q3.setParameter("via", via);
    	q3.setParameter("numeroCivico", numeroCivico);
    	String idUtente = q3.getSingleResult().toString();
    	
    	String s4 = "SELECT idutente FROM PossessoAbilit p WHERE p.idabilita=:idAbilita AND p.idutente=:idUtente";
    	Query q4 = manager.createQuery(s4);
    	q4.setParameter("idAbilita", idAbilita);
    	q4.setParameter("idUtente", idUtente);
    	String idUtenteCercato = q4.getClass().toString();
    	
    	String s5 = "FROM UtenteRegistrato u WHERE u.id=:idUtenteCercato";
    	Query q5 = manager.createQuery(s5);
    	q5.setParameter("idUtenteCercato", idUtenteCercato);
		
		@SuppressWarnings("unchecked")
		ArrayList<UtenteRegistrato> lista = (ArrayList<UtenteRegistrato>) q5.getResultList();
		if (lista.size()== 0)  return null ;
		else return lista;
	}

}
